package me.zhengjie.config.apijson;

import apijson.framework.APIJSONSQLExecutor;
import apijson.orm.SQLConfig;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.utils.SpringContextHolder;

import javax.sql.DataSource;
import java.sql.Connection;
@Slf4j
public class AutoExecutor extends APIJSONSQLExecutor {

    @Override
    public Connection getConnection(SQLConfig config) throws Exception {
        Connection c = connectionMap.get(config.getDatabase());
        if (c == null || c.isClosed()) {
            try {
                DataSource ds = SpringContextHolder.getBean(DataSource.class);
                // 另一种方式是 DruidConfig 初始化获取到 Datasource 后给静态变量 DATA_SOURCE 赋值： ds = DruidConfig.DATA_SOURCE.getConnection();
                connectionMap.put(config.getDatabase(), ds.getConnection());
            } catch (Exception e) {
                log.error("DemoSQLExecutor.getConnection   try { "
                        + "DataSource ds = DemoApplication.getApplicationContext().getBean(DataSource.class); .."
                        + "} catch (Exception e) = " + e.getMessage());
            }
        }

        // 必须最后执行 super 方法，因为里面还有事务相关处理。
        // 如果这里是 return c，则会导致 增删改 多个对象时只有第一个会 commit，即只有第一个对象成功插入数据库表
        return super.getConnection(config);
    }
}
